1. Field of the Invention
This invention relates to the field of microcontrollers and, more particularly, to microcontrollers having an integrated internal memory.
2. Description of the Relevant Art
Integrated circuits have become ubiquitous in modern society. Products as diverse as automobiles, computer systems, televisions and telephones incorporate one or more integrated circuits to perform various functions. Generally speaking, an integrated circuit comprises circuitry formed upon a single monolithic semiconductor substrate. The integrated circuit implements one or more cores which perform the various functions of the integrated circuit as well as circuitry for communicating with other integrated circuits and devices external to the integrated circuit. A core is circuitry connected together to provide a desired high level function. For example, a processor core is circuitry which executes a set of instructions. Other cores may be a digital signal processing core configured to process signals, a cache controller core for managing a block of external memory as a cache, etc.
One popular type of integrated circuit is a microcontroller, which comprises a processor core as well as communications cores for various serial and parallel port connections to peripheral devices. Microcontrollers allow programmable control (via the processor core) of the peripherals connected thereto. Microcontrollers are commonly employed in a wide variety of devices including printers, cellular phones, automobiles, etc. Generally, a microcontroller is employed as the primary control chip in an electronic circuit embedded within a product other than a general purpose computer system (i.e. the so-called "embedded applications"). The microcontroller and related circuitry is employed to satisfy the computing demands of a product whose general purpose is not necessarily computing (e.g., a television, telephone, or automobile control systems).
Modern microcontrollers incorporate not only a processor core and communications cores, but also integrate other devices commonly employed therewith. Particularly, microcontrollers have begun to integrate blocks of memory. Integrating previously discrete components such as memory may lead to cost savings in the final product, since fewer components are needed. Unfortunately, integration may complicate debugging during product development. Since the integrated components within the microcontroller communicate with each other via internal buses not accessible external to the microcontroller, the observability of a user to the activity between the integrated components is reduced as compared to a discrete component implemented with readily available pins (i.e., test points).
Particularly, while developing the instruction code to be executed by the microcontroller, debugging becomes more complicated when the memory is internal to the microcontroller. External monitoring of the microcontroller no longer reveals all information regarding the memory accesses occurring to the internal memory, nor the data being transferred in response to the memory accesses. If the instruction code is not performing as the user expects, the user can oftentimes not determine the cause. Many microcontroller architectures (such as the 80C186 architecture) allow for operands to be directly accessed from memory locations. Therefore, if a memory operand is erroneous and the memory is internal to the microcontroller, a user may have to expend onerous efforts to detect the problem. For example, the instruction code may need to be modified to insert instructions for checking the values stored in a given location. Changing the code may change the dynamics of the program execution, potentially hiding the problem further by changing the circumstances in which the problem occurs. It is therefore desirable to have improved ability to debug the instruction code of an embedded application employing a microcontroller with integrated internal memory.